package com.kly.user.dto;

import lombok.Builder;
import lombok.Data;
import java.io.Serializable;

@Data
@Builder
public class AddMessageReq implements Serializable {

    private static final long serialVersionUID = 8202261494595426544L;
    /**
     * 发送用户ID
     */
    private String fromUserId;

    /**
     * 目标ID，即为客户端targetId，根据会话类型 channelType 的不同，可能为二人目标 ID、群聊 Id、聊天室 ID、客服 Id 等
     */
    private String toUserId;

    /**
     * 消息类型，接受内置消息类型（见消息类型概述）或自定义消息的消息类型值。
     *
     * 消息类型	    ObjectName
     * 文本	        RC:TxtMsg
     * 高清语音消息	RC:HQVCMsg
     * 图片消息	    RC:ImgMsg
     * GIF 图片消息	RC:GIFMsg
     * 图文消息	    RC:ImgTextMsg
     * 文件消息	    RC:FileMsg
     * 位置消息	    RC:LBSMsg
     * 小视频消息	    RC:SightMsg
     * 引用消息	    RC:ReferenceMsg
     * 合并转发消息	RC:CombineMsg
     */
    private String objectName;

    /**
     * 所发送消息的内容，单条消息最大 128k
     * 1) 内置消息类型：将消息内容体 JSON 对象序列化为 JSON 字符串传入。
     * 消息内容 JSON 结构体详见用户内容类消息格式或其他内置消息类型的消息内容格式。
     * 例如，文本消息内容 JSON 结构体内部包含 content 字段（此为 JSON 结构体内的 key 值，注意区分），
     * 则需要将 {“content”:”Hello world!”} 序列化后的结果作为此处 content 字段的值。
     *
     * 2) 自定义消息类型（objectName 字段必须指定为自定义消息类型）：如果发送自定义消息，
     * 该参数可自定义格式，不限于 JSON。
     */
    private String content;

    /**
     * 会话类型: PERSON（二人会话）、PERSONS（讨论组会话）、GROUP（群组会话）、TEMPGROUP（聊天室会话）、
     * CUSTOMERSERVICE（客服会话）、NOTIFY（系统通知）、MC（应用公众服务）、MP（公众服务）、
     * ULTRAGROUP（超级群服务）。
     *
     * 该字段对应客户端 SDK 中 ConversationType 类型：1（二人会话）、2（讨论组会话）、3（群组会话）、4（聊天室会话）、
     * 5（客服会话）、6（系统通知）、7（应用公众服务）、8（公众服务）、10（超级群服务）。
     */
    private String channelType;

    /**
     * 服务端收到客户端发送消息时的服务器时间（1970年到现在的毫秒数）
     */
    private String msgTimestamp;

    /**
     * 可通过 msgUID 确定消息唯一
     */
    private String msgUID;

    /**
     * 原始消息 ID，仅针对超级群会话有效。在修改消息、扩展消息、删除消息时，
     * 此字段携带有效值。可通过此字段查询原始消息内容。修改超级群消息后，如果需要在服务端撤回消息，
     * 必须使用该 ID
     */
    private String originalMsgUID;

    /**
     * 消息中是否含有敏感信息。0 为不包含，1 为含有屏蔽敏感词，2 为含有替换敏感词。
     *
     * 注意：含有屏蔽敏感词的消息默认不进行路由，可提交工单申请开通。
     * 如果未开通（默认）， sensitiveType 值默认为 0，不代表任何意义。
     * 如果已开通，可通过该属性判断文本消息中是否含有敏感词。图片、语言消息审核不通过时标识为 1。
     * 支持单聊、群聊、聊天室、超级群会话类型，其他会话类型默认为 0，开通后含有屏蔽敏感词的消息也不会
     * 进行下发，只会进行消息路由。
     */
    private String sensitiveType;

    /**
     * 标识消息的发送源头，包括：iOS、Android、Websocket、MiniProgram（小程序）、
     * PC、Server（通过 Server API 发送，需要开通 Server API 发送消息进行消息路由功能）
     */
    private String source;

    /**
     * 会话频道 ID，使用融云超级群频道功能时，可通过 buschannel 获取频道 ID，未使用时该内容为空
     */
    private String busChannel;

    /**
     * 接收群定向消息的群组成员用户 ID 数组。仅群组会话（channelType 为 GROUP）支持群定向消息，
     * 如果指定的用户不在群组中，该字段为空。非群定向消息时，该字段为空
     */
    private String groupUserIds;


}
